"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/6/3 10:47
@Description :  装饰器的使用

"""
import time
"""
study()  实现了上课的基本操作 
需求: 
   1. 上课之前添加一个上课时间的提示
   2. 下课之前添加一个下课时间的提示
业务功能的增强
    解决方案：
    1.  修改源代码   不推荐
    2.  不修改源代码实现功能的增强  推荐
        2.1 自定义一个增强函数      缺点: 改变了用户的使用方式
        2.2 装饰器   推荐          特殊形式的闭包
"""


# 装饰器  fn  需要增强的函数
def study_decorator(fn):
    def inner():
        print('---------上课时间到了-----------')
        fn()
        time.sleep(5)
        print('---------下课时间到了-----------')
    return inner


# 自定义增强函数
def study_pro(fn):
    print('---------上课时间到了-----------')
    # 调用基础函数 实现基本业务功能
    fn()
    time.sleep(5)
    print('---------下课时间到了-----------')


#  study = study_decorator(study)  inner
@study_decorator  # 函数在执行时会作为参数传入装饰器  函数实际执行的是装饰器的内部函数
def study():
    print('正在上课...')


if __name__ == '__main__':
    # study_pro(study)
    study()  # inner
